
set(name internet)

set(nsc_sources)
set(nsc_headers)
if(${NS3_NSC})
    set(nsc_sources
            nsc-sysctl.cc
            nsc-tcp-l4-protocol.cc
            nsc-tcp-socket-factory-impl.cc
            nsc-tcp-socket-impl.cc
            )
    set(nsc_headers
            nsc-sysctl.h
            nsc-tcp-l4-protocol.h
            nsc-tcp-socket-factory-impl.h
            nsc-tcp-socket-impl.h
            )
endif()

set(source_files
        ${nsc_sources}
        model/ip-l4-protocol.cc
        model/udp-header.cc
        model/tcp-header.cc
        model/ipv4-interface.cc
        model/ipv4-l3-protocol.cc
        model/ipv4-end-point.cc
        model/udp-l4-protocol.cc
        model/tcp-l4-protocol.cc
        model/arp-header.cc
        model/arp-cache.cc
        model/arp-l3-protocol.cc
        model/arp-queue-disc-item.cc
        model/udp-socket-impl.cc
        model/ipv4-end-point-demux.cc
        model/udp-socket-factory-impl.cc
        model/tcp-socket-factory-impl.cc
        model/pending-data.cc
        model/rtt-estimator.cc
        model/ipv4-raw-socket-factory-impl.cc
        model/ipv4-raw-socket-impl.cc
        model/icmpv4.cc
        model/icmpv4-l4-protocol.cc
        model/loopback-net-device.cc
        model/ndisc-cache.cc
        model/ipv6-interface.cc
        model/icmpv6-header.cc
        model/ipv6-l3-protocol.cc
        model/ipv6-end-point.cc
        model/ipv6-end-point-demux.cc
        model/ipv6-raw-socket-factory-impl.cc
        model/ipv6-raw-socket-impl.cc
        model/ipv6-autoconfigured-prefix.cc
        model/ipv6-extension.cc
        model/ipv6-extension-header.cc
        model/ipv6-extension-demux.cc
        model/ipv6-option.cc
        model/ipv6-option-header.cc
        model/ipv6-option-demux.cc
        model/icmpv6-l4-protocol.cc
        model/tcp-socket-base.cc
        model/tcp-socket-state.cc
        model/tcp-highspeed.cc
        model/tcp-hybla.cc
        model/tcp-vegas.cc
        model/tcp-congestion-ops.cc
        model/tcp-westwood.cc
        model/tcp-scalable.cc
        model/tcp-veno.cc
        model/tcp-bic.cc
        model/tcp-yeah.cc
        model/tcp-ledbat.cc
        model/tcp-illinois.cc
        model/tcp-htcp.cc
        model/tcp-lp.cc
        model/tcp-dctcp.cc
        model/tcp-rx-buffer.cc
        model/tcp-tx-buffer.cc
        model/tcp-tx-item.cc
        model/tcp-rate-ops.cc
        model/tcp-option.cc
        model/tcp-option-rfc793.cc
        model/tcp-option-winscale.cc
        model/tcp-option-ts.cc
        model/tcp-option-sack-permitted.cc
        model/tcp-option-sack.cc
        model/ipv4-packet-info-tag.cc
        model/ipv6-packet-info-tag.cc
        model/ipv4-interface-address.cc
        model/ipv4-address-generator.cc
        model/ipv4-header.cc
        model/ipv4-queue-disc-item.cc
        model/ipv4-packet-filter.cc
        model/ipv4-route.cc
        model/ipv4-routing-protocol.cc
        model/udp-socket.cc
        model/udp-socket-factory.cc
        model/tcp-socket.cc
        model/tcp-socket-factory.cc
        model/tcp-recovery-ops.cc
        model/tcp-prr-recovery.cc
        model/ipv4.cc
        model/ipv4-raw-socket-factory.cc
        model/ipv6-header.cc
        model/ipv6-queue-disc-item.cc
        model/ipv6-packet-filter.cc
        model/ipv6-interface-address.cc
        model/ipv6-route.cc
        model/ipv6.cc
        model/ipv6-raw-socket-factory.cc
        model/ipv6-routing-protocol.cc
        model/ipv4-list-routing.cc
        model/ipv6-list-routing.cc
        helper/ipv4-list-routing-helper.cc
        helper/ipv6-list-routing-helper.cc
        model/ipv4-static-routing.cc
        model/ipv4-routing-table-entry.cc
        model/ipv6-static-routing.cc
        model/ipv6-routing-table-entry.cc
        helper/ipv4-static-routing-helper.cc
        helper/ipv6-static-routing-helper.cc
        model/global-router-interface.cc
        model/global-route-manager.cc
        model/global-route-manager-impl.cc
        model/candidate-queue.cc
        model/ipv4-global-routing.cc
        helper/ipv4-global-routing-helper.cc
        helper/internet-stack-helper.cc
        helper/internet-trace-helper.cc
        helper/ipv4-address-helper.cc
        helper/ipv4-interface-container.cc
        helper/ipv4-routing-helper.cc
        helper/ipv6-address-helper.cc
        helper/ipv6-interface-container.cc
        helper/ipv6-routing-helper.cc
        model/ipv6-address-generator.cc
        model/ipv4-packet-probe.cc
        model/ipv6-packet-probe.cc
        model/ipv6-pmtu-cache.cc
        model/ripng.cc
        model/ripng-header.cc
        helper/ripng-helper.cc
        model/rip.cc
        model/rip-header.cc
        helper/rip-helper.cc
        )

set(private_header_files
        )

set(header_files
        ${private_header_files}
        ${header_files}
        model/udp-header.h
        model/tcp-header.h
        model/tcp-option.h
        model/tcp-option-winscale.h
        model/tcp-option-ts.h
        model/tcp-option-sack-permitted.h
        model/tcp-option-sack.h
        model/tcp-option-rfc793.h
        model/icmpv4.h
        model/icmpv6-header.h
        # used by routing
        model/ipv4-interface.h
        model/ipv4-l3-protocol.h
        model/ipv4-end-point.h
        model/ipv4-end-point-demux.h
        model/ipv6-l3-protocol.h
        model/ipv6-extension.h
        model/ipv6-extension-demux.h
        model/ipv6-extension-header.h
        model/ipv6-option.h
        model/ipv6-option-header.h
        model/ipv6-end-point.h
        model/ipv6-end-point-demux.h
        model/arp-l3-protocol.h
        model/udp-l4-protocol.h
        model/tcp-l4-protocol.h
        model/icmpv4-l4-protocol.h
        model/ip-l4-protocol.h
        model/arp-header.h
        model/arp-cache.h
        model/arp-queue-disc-item.h
        model/icmpv6-l4-protocol.h
        model/ipv6-interface.h
        model/ndisc-cache.h
        model/loopback-net-device.h
        model/ipv4-packet-info-tag.h
        model/ipv6-packet-info-tag.h
        model/ipv4-interface-address.h
        model/ipv4-address-generator.h
        model/ipv4-header.h
        model/ipv4-queue-disc-item.h
        model/ipv4-packet-filter.h
        model/ipv4-route.h
        model/ipv4-routing-protocol.h
        model/udp-socket.h
        model/udp-socket-factory.h
        model/tcp-socket.h
        model/tcp-socket-factory.h
        model/ipv4.h
        model/ipv4-raw-socket-factory.h
        model/ipv4-raw-socket-impl.h
        model/ipv6-header.h
        model/ipv6-queue-disc-item.h
        model/ipv6-packet-filter.h
        model/ipv6-interface-address.h
        model/ipv6-route.h
        model/ipv6.h
        model/ipv6-raw-socket-factory.h
        model/ipv6-routing-protocol.h
        model/ipv4-list-routing.h
        model/ipv6-list-routing.h
        helper/ipv4-list-routing-helper.h
        helper/ipv6-list-routing-helper.h
        model/ipv4-static-routing.h
        model/ipv4-routing-table-entry.h
        model/ipv6-static-routing.h
        model/ipv6-routing-table-entry.h
        helper/ipv4-static-routing-helper.h
        helper/ipv6-static-routing-helper.h
        model/global-router-interface.h
        model/global-route-manager.h
        model/global-route-manager-impl.h
        model/candidate-queue.h
        model/ipv4-global-routing.h
        helper/ipv4-global-routing-helper.h
        helper/internet-stack-helper.h
        helper/internet-trace-helper.h
        helper/ipv4-address-helper.h
        helper/ipv4-interface-container.h
        helper/ipv4-routing-helper.h
        helper/ipv6-address-helper.h
        helper/ipv6-interface-container.h
        helper/ipv6-routing-helper.h
        model/ipv6-address-generator.h
        model/tcp-highspeed.h
        model/tcp-hybla.h
        model/tcp-vegas.h
        model/tcp-congestion-ops.h
        model/tcp-westwood.h
        model/tcp-scalable.h
        model/tcp-veno.h
        model/tcp-bic.h
        model/tcp-yeah.h
        model/tcp-illinois.h
        model/tcp-htcp.h
        model/tcp-lp.h
        model/tcp-dctcp.h
        model/tcp-ledbat.h
        model/tcp-socket-base.h
        model/tcp-socket-state.h
        model/tcp-tx-buffer.h
        model/tcp-tx-item.h
        model/tcp-rate-ops.h
        model/tcp-rx-buffer.h
        model/tcp-recovery-ops.h
        model/tcp-prr-recovery.h
        model/rtt-estimator.h
        model/ipv4-packet-probe.h
        model/ipv6-packet-probe.h
        model/ipv6-pmtu-cache.h
        model/ripng.h
        model/ripng-header.h
        helper/ripng-helper.h
        model/rip.h
        model/rip-header.h
        helper/rip-helper.h
        )

set(libraries_to_link
        ${libnetwork}
        ${libcore}
        ${libbridge}
        ${libtraffic-control}
        )

set(test_sources
        test/global-route-manager-impl-test-suite.cc
        test/ipv4-address-generator-test-suite.cc
        test/ipv4-address-helper-test-suite.cc
        test/ipv4-list-routing-test-suite.cc
        test/ipv4-packet-info-tag-test-suite.cc
        test/ipv4-raw-test.cc
        test/ipv4-header-test.cc
        test/ipv4-fragmentation-test.cc
        test/ipv4-forwarding-test.cc
        test/ipv4-test.cc
        test/ipv4-static-routing-test-suite.cc
        test/ipv4-global-routing-test-suite.cc
        test/ipv6-extension-header-test-suite.cc
        test/ipv6-list-routing-test-suite.cc
        test/ipv6-packet-info-tag-test-suite.cc
        test/ipv6-test.cc
        test/ipv6-raw-test.cc
        test/ipv6-address-duplication-test.cc
        test/tcp-test.cc
        test/tcp-timestamp-test.cc
        test/tcp-sack-permitted-test.cc
        test/tcp-wscaling-test.cc
        test/tcp-option-test.cc
        test/tcp-header-test.cc
        test/tcp-ecn-test.cc
        test/tcp-general-test.cc
        test/tcp-error-model.cc
        test/tcp-slow-start-test.cc
        test/tcp-cong-avoid-test.cc
        test/tcp-fast-retr-test.cc
        test/tcp-rto-test.cc
        test/tcp-highspeed-test.cc
        test/tcp-hybla-test.cc
        test/tcp-vegas-test.cc
        test/tcp-scalable-test.cc
        test/tcp-veno-test.cc
        test/tcp-bic-test.cc
        test/tcp-yeah-test.cc
        test/tcp-illinois-test.cc
        test/tcp-htcp-test.cc
        test/tcp-lp-test.cc
        test/tcp-ledbat-test.cc
        test/tcp-zero-window-test.cc
        test/tcp-pkts-acked-test.cc
        test/tcp-rtt-estimation.cc
        test/tcp-bytes-in-flight-test.cc
        test/tcp-advertised-window-test.cc
        test/tcp-classic-recovery-test.cc
        test/tcp-prr-recovery-test.cc
        test/tcp-loss-test.cc
        test/udp-test.cc
        test/ipv6-address-generator-test-suite.cc
        test/ipv6-dual-stack-test-suite.cc
        test/ipv6-fragmentation-test.cc
        test/ipv6-forwarding-test.cc
        test/ipv6-ripng-test.cc
        test/ipv6-address-helper-test-suite.cc
        test/rtt-test.cc
        test/tcp-tx-buffer-test.cc
        test/tcp-rx-buffer-test.cc
        test/tcp-endpoint-bug2211.cc
        test/tcp-datasentcb-test.cc
        test/tcp-rate-ops-test.cc
        test/ipv4-rip-test.cc
        test/tcp-close-test.cc
        test/icmp-test.cc
        test/ipv4-deduplication-test.cc
        test/tcp-dctcp-test.cc
        test/tcp-syn-connection-failed-test.cc
        )

build_lib("${name}" "${source_files}" "${header_files}" "${libraries_to_link}" "${test_sources}")

#file(COPY ${private_header_files} DESTINATION ${CMAKE_HEADER_OUTPUT_DIRECTORY}/private)
